package com.itfenghuang.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class A01_Stream流 {
    /**
     * 1.概述
     *  需求:
     *      创建一个字符串集合对象,将张曼玉,张翠山,张三丰,
     *      张三,李四,王五五  存入到集合中
     *          1).将集合中所有姓张的元素打印在控制台
     *          2).将所有姓张的并且字符串长度为3 的元素打印在控制台
     * 2.能够简化开发
     * 3.stream流中有三类方法
     *  1).获取stream流方法
     *  2).中间方法
     *      类似流水线上操作  过滤,去重
     *      特点:一次操作完毕之后还可以继续进行其他操作
     *      filter,limit,skip,distinct.concat
     *  3).终结方法
     *      一个stream流只能有一个终结方法
     *
     */
    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();
        list.add("张曼玉");
        list.add("张翠山");
        list.add("张三丰");
        list.add("张三");
        list.add("李四");
        list.add("王五五");
//        System.out.println(list);
//        for (String s : list) {
//            if (s.startsWith("张") && s.length()==3){
//                System.out.println(s);
//            }
//        }
//        list.stream().filter((String s)->{
//            return s.startsWith("张") && s.length()==3;
//        }).forEach((String s)->{
//            System.out.println(s);
//        });
//        list.stream().filter(s->
//            s.startsWith("张") && s.length()==3
//        ).forEach( s->
//            System.out.println(s)
//        );

//        int[] arr={1,2,3,4,5};
        //数组获取stream流的方法是arrays类中的stream()方法
//        Arrays.stream(arr).filter(i->i>3).forEach(i-> System.out.println(i));
        // Stream<T> limit(long maxSize);
        // 返回由该流的元素组成的流,截断长度不能超过maxSize
//        list.stream().limit(4).forEach(s-> System.out.println(s));
        //Stream<T> skip(long n);
//        list.stream().skip(2).forEach(s-> System.out.println(s));
        Stream<String> stream1 = list.stream().limit(6);
        Stream<String> stream2 = list.stream().skip(0);
        //public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
        //将两个流合并成一个流,新的流包含两个流的所有的元素
//        Stream.concat(stream1,stream2).forEach(s-> System.out.println(s));
        //Stream<T> distinct();  去重
//        Stream.concat(stream1,stream2).distinct().forEach(s-> System.out.println(s));
        //long count(); 统计流中元素的个数
//        System.out.println(list.stream().filter(s->s.startsWith("张")).count());
        //将集合中的姓张的并且是三个字的存到一个新的集合中
        //收集方法,可以将流中的数据收集到一个新的集合中
//        List<String> collect = list.stream().filter(s -> s.startsWith("张") && s.length() == 3)
//                .collect(Collectors.toList());
//        System.out.println(collect);
        //有一个字符串数组,存储的是姓名和年龄  张三 18 将字符串数组中的元素存到map集合中
        // key=姓名  value=年龄
        String[] strs={"张三,18","张翠山,28","张三丰,80"};
//        Map<String, Integer> map = Arrays.stream(strs).collect(Collectors.toMap((String s) -> {
//            String[] split = s.split(",");
//            String s1 = split[0];
//            return s1;
//        }, (String s) -> {
//            String[] split = s.split(",");
//            String s1 = split[1];
//            int i = Integer.parseInt(s1);
//            return i;
//        }));
//        System.out.println(map);
        Map<String, Integer> map =
                Arrays.stream(strs).collect(Collectors.toMap(s ->
           s.split(",")[0],s -> Integer.parseInt(s.split(",")[1])));
        System.out.println(map);


        //类加载器  类加载机制

    }
}
